Emberveil sourcegame/2006Scape Server/src/main/java/org/apollo/cache/def/EquipmentDefinition.java
package org.apollo.cache.def;
import java.util.HashMap;
import java.util.Map;
import com.google.common.base.Preconditions;
/**
* Represents a type of Item that may be equipped.
*
* @author Graham
*/
public final class EquipmentDefinition {
/**
* The attack id.
*/
private static final int ATTACK = 0;
/**
* The defence id.
*/
private static final int DEFENCE = 1;
/**
* The strength id.
*/
private static final int STRENGTH = 2;
/**
* The hitpoints id.
*/
private static final int HITPOINTS = 3;
/**
* The ranged id.
*/
private static final int RANGED = 4;
/**
* The prayer id.
*/
private static final int PRAYER = 5;
/**
* The magic id.
*/
private static final int MAGIC = 6;
/**
* The equipment definitions.
*/
private static final Map<Integer, EquipmentDefinition> definitions = new HashMap<>();
/**
* Gets the total number of equipment definitions.
*
* @return The count.
*/
public static int count() {
return definitions.size();
}
/**
* Initialises the equipment definitions.
*
* @param definitions The definitions.
* @throws RuntimeException If there is an id mismatch.
*/
public static void init(EquipmentDefinition[] definitions) {
for (int id = 0; id < definitions.length; id++) {
EquipmentDefinition def = definitions[id];
if (def != null) {
if (def.getId() != id) {
throw new RuntimeException("Equipment definition id mismatch.");
}
EquipmentDefinition.definitions.put(def.getId(), def);
}
}
}
/**
* Gets an equipment definition by its id.
*
* @param id The id.
* @return {@code null} if the item is not equipment, the definition otherwise.
* @throws IndexOutOfBoundsException If the id is out of bounds.
*/
public static EquipmentDefinition lookup(int id) {
Preconditions.checkElementIndex(id, ItemDefinition.count(), "Id out of bounds.");
return definitions.get(id);
}
/**
* The item id.
*/
private final int id;
/**
* The array of skill requirement levels.
*/
private final int[] levels = { 1, 1, 1, 1, 1, 1, 1 };
/**
* The slot this equipment goes into.
*/
private int slot;
/**
* Various flags.
*/
private boolean twoHanded, fullBody, fullHat, fullMask;
/**
* Creates a new equipment definition.
*
* @param id The id.
*/
public EquipmentDefinition(int id) {
this.id = id;
}
/**
* Gets the minimum attack level required to equip this item.
*
* @return The level.
*/
public int getAttackLevel() {
return levels[ATTACK];
}
/**
* Gets the minimum defence level required to equip this item.
*
* @return The level.
*/
public int getDefenceLevel() {
return levels[DEFENCE];
}
/**
* Gets the minimum hitpoints level required to equip this item.
*
* @return The level.
*/
public int getHitpointsLevel() {
return levels[HITPOINTS];
}
/**
* Gets the minimum magic level required to equip this item.
*
* @return The level.
*/
public int getMagicLevel() {
return levels[MAGIC];
}
/**
* Gets the minimum prayer level required to equip this item.
*
* @return The level.
*/
public int getPrayerLevel() {
return levels[PRAYER];
}
/**
* Gets the minimum ranged level required to equip this item.
*
* @return The level.
*/
public int getRangedLevel() {
return levels[RANGED];
}
/**
* Gets the minimum strength level required to equip this item.
*
* @return The level.
*/
public int getStrengthLevel() {
return levels[STRENGTH];
}
/**
* Gets the id.
*
* @return The id.
*/
public int getId() {
return id;
}
/**
* Gets the minimum level required to equip this item for a specific skill.
*
* @param skill The skill id.
* @return The level.
*/
public int getLevel(int skill) {
Preconditions.checkArgument(skill >= ATTACK && skill <= MAGIC, "Skill id out of bounds.");
return levels[skill];
}
/**
* Gets the target slot.
*
* @return The target slot.
*/
public int getSlot() {
return slot;
}
/**
* Checks if this equipment is a full body.
*
* @return {@code true} if so, {@code false} if not.
*/
public boolean isFullBody() {
return fullBody;
}
/**
* Checks if this equipment is a full hat.
*
* @return {@code true} if so, {@code false} if not.
*/
public boolean isFullHat() {
return fullHat;
}
/**
* Checks if this equipment is a full mask.
*
* @return {@code true} if so, {@code false} if not.
*/
public boolean isFullMask() {
return fullMask;
}
/**
* Checks if this equipment is two-handed.
*
* @return {@code true} if so, {@code false} if not.
*/
public boolean isTwoHanded() {
return twoHanded;
}
/**
* Sets the flags.
*
* @param twoHanded The two handed flag.
* @param fullBody The full body flag.
* @param fullHat The full hat flag.
* @param fullMask The full mask flag.
*/
public void setFlags(boolean twoHanded, boolean fullBody, boolean fullHat, boolean fullMask) {
this.twoHanded = twoHanded;
this.fullBody = fullBody;
this.fullHat = fullHat;
this.fullMask = fullMask;
}
/**
* Sets the required levels.
*
* @param attack The required attack level.
* @param strength The required strength level.
* @param defence The required defence level.
* @param ranged The required ranged level.
* @param prayer The required prayer level.
* @param magic The required magic level.
*/
public void setLevels(int attack, int strength, int defence, int ranged, int prayer, int magic) {
setLevels(attack, strength, defence, 1, ranged, prayer, magic);
}
/**
* Sets the required levels.
*
* @param attack The required attack level.
* @param strength The required strength level.
* @param defence The required defence level.
* @param hitpoints The required hitpoints level.
* @param ranged The required ranged level.
* @param prayer The required prayer level.
* @param magic The required magic level.
*/
public void setLevels(int attack, int strength, int defence, int hitpoints, int ranged, int prayer, int magic) {
levels[ATTACK] = attack;
levels[STRENGTH] = strength;
levels[DEFENCE] = defence;
levels[HITPOINTS] = hitpoints;
levels[RANGED] = ranged;
levels[PRAYER] = prayer;
levels[MAGIC] = magic;
}
/**
* Sets the target slot.
*
* @param slot The target slot.
*/
public void setSlot(int slot) {
this.slot = slot;
}
}